package com.daisuxia.back.utils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;


/* *
 *类名：AlipayFunction
 *功能：支付宝接口公用函数类
 *详细：该类是请求、通知返回两个文件所调用的公用函数核心处理文件，不需要修改
 *版本：3.3
 *日期：2012-08-14
 *说明：
 *以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用，只是提供一个参考。
 */

public class MapConvertCoreUtils {

	/** 
	 * 除去数组中的空值和签名参数
	 * @param sArray 签名参数组
	 * @return 去掉空值与签名参数后的新签名参数组
	 */
	public static Map<String, Object> paraFilter(Map<String, Object> sArray) {

		Map<String, Object> result = new HashMap<String, Object>();

		if (sArray == null || sArray.size() <= 0) {
			return result;
		}

		for (Object key : sArray.keySet()) {
			Object value = sArray.get(key);
			if (value == null || value.equals("") || ((String) key).equalsIgnoreCase("_sign_") || ((String) key).equalsIgnoreCase("_cmd_")|| ((String) key).equalsIgnoreCase("_client_")|| ((String) key).equalsIgnoreCase("_deviceid_")|| ((String) key).equalsIgnoreCase("key")|| ((String) key).equalsIgnoreCase("sign_type")) {
				continue;
			}
			result.put((String) key, value);
		}

		return result;
	}

	/** 
	 * 把数组所有元素排序，并按照“参数=参数值”的模式用“&”字符拼接成字符串
	 * @param params 需要排序并参与字符拼接的参数组
	 * @return 拼接后字符串
	 */
	public static String createLinkString(Map<String, Object> params) {

		List<String> keys = new ArrayList<String>(params.keySet());
		Collections.sort(keys);

		String prestr = "";

		for (int i = 0; i < keys.size(); i++) {
			String key = keys.get(i);
			Object value = params.get(key);

			if (i == keys.size() - 1) {//拼接时，不包括最后一个&字符
				prestr = prestr + key + "=" + value;
			} else {
				prestr = prestr + key + "=" + value + "&";
			}
		}

		return prestr;
	}
	
	
	public static Map<String, Object> object2Map(Object object){
        JSONObject jsonObject = (JSONObject) JSON.toJSON(object);
        Set<Entry<String,Object>> entrySet = jsonObject.entrySet();
        Map<String, Object> map=new HashMap<String,Object>();
        for (Entry<String, Object> entry : entrySet) {
        	if(!"".equals(entry.getValue())&&entry.getValue()!=null) {
        		map.put(entry.getKey(), entry.getValue());
        	}
            
        }
        
        
        return map;
    }
	/**
	 * map object convert to string
	 * @param mm
	 * @return
	 */
	public static Map<String, String> object2MapString(Map<String, Object> mm){
		Map<String, String> w=new HashMap<String,String>();
		 Iterator<Map.Entry<String, Object>> it = mm.entrySet().iterator();
		        while (it.hasNext()) {
		               Map.Entry<String, Object> entry = it.next();
		              w.put(entry.getKey(), entry.getValue()+"");
		        }
				return w;
    }
	
	



}
